package com.sywl.ytcx.service.Impl;

import com.sywl.ytcx.config.PathConfig;
import com.sywl.ytcx.service.AssetService;
import com.sywl.ytcx.util.FileUtil;
import org.springframework.core.io.Resource;
import org.springframework.core.io.FileSystemResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;

@Service
public class AssetServiceImpl implements AssetService {

    /**
     * 获取图片
     *
     * @param fileName 文件名
     * @param type     类型
     * @return 图片
     */
    @Override
    public ResponseEntity<Resource> getAsset(String fileName, String type, boolean download) {
        try {
            File file = new File(PathConfig.FILE_PATH + type + "/" + fileName);
            if (!file.exists()) return null;
            /*此处需要判断是否为.webp，nginx那边会做转发；图片上传之后会先做城webp格式和原件 * 是则返回.webp，不是就找fileName原值 * */
//            if (!fileName.endsWith(".webp")) {
//                fileName = fileName.replace(".webp", "");
//            }
            String mimeType = FileUtil.getMimeType(fileName);
            if ("NotImage".equals(mimeType)) {
                file.delete(); // 注意：这里删除文件可能不是一个好主意，因为它可能会影响其他正在进行的请求
                return ResponseEntity.notFound().build();
            }
            HttpHeaders headers = new HttpHeaders();
            headers.add(HttpHeaders.CONTENT_DISPOSITION,
                    download ? "attachment; " + "filename=" + fileName :
                            "inline; " + "filename=" + fileName);
            headers.setContentType(MediaType.parseMediaType(mimeType));
            return ResponseEntity.ok()
                    .headers(headers)
                    .contentLength(file.length())
                    .body(new FileSystemResource(file));
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }


    /**
     * 上传图片
     *
     * @param file 文件
     * @param type 类型
     * @return 文件名
     * <p>
     * 暂时说没有安全隐私问题，type这里等于文件夹名
     * 关于压缩优化：使用webp压缩优化 - 后面再说了，熬了两个大夜，这个代码不要改了
     */
    @Override
    public String uploadAsset(MultipartFile file, String type) throws IOException {
        try {
            return FileUtil.getFileUrl(FileUtil.storeFile(file, PathConfig.FILE_PATH + type), type);
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }

    }


}
